package mumu.android.lib.app;

import java.util.Observable;

import android.content.Context;
import android.os.AsyncTask;

/**
 * Observer观察者模式：定义对象间一对多的依赖关系，当被监听的对象状态发生变化后，可以通知到依赖于它的其他对象。
 * 应用场景：1、当一个对象状态更新，需要通知其他对象，而且其他对象数量动态可变化的。
 * 			2、对象仅需要将自己的更新状态通知给其他对象，而不需要知道其他对象的细节。
 * 优点：1、观察者和被观察者是松耦合的，可各自独立改变
 * 		2、高内聚。
 * 缺点：1、松耦合导致代码关系不明显，增加代码维护难度。
 * 		2、如果被观察者被大量订阅，在通知时可能存在效率问题。
 * 
 * @author Administrator
 * 
 */
public class UnZipFile extends Observable {

	static UnZipFile unZipFile;
	Context mContext;

	public static UnZipFile getInstance(Context mContext) {

		if (unZipFile == null)
			unZipFile = new UnZipFile(mContext);
		return unZipFile;
	}

	public UnZipFile(Context mContext) {
		this.mContext = mContext;
	}

	public void check() {
		new ProgressBarAsyncTask().execute(0);
	}

	public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {

		public ProgressBarAsyncTask() {
			super();
		}

		@Override
		protected String doInBackground(Integer... params) {
			for (int i = 0; i < 100; i++) {
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				publishProgress(i);
			}
			return "";
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			// 通知观察者
			setChanged();
			notifyObservers(values[0]);
		}
	}
}